package com.wgh.product.api.client;

import com.wgh.common.vo.Result;
import com.wgh.product.dto.ProductAttributeValueDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 商品属性值服务客户端
 * 用于其他服务调用商品属性值服务的API
 */
@FeignClient(name = "shop-product", path = "/api/product-attribute-value")
public interface ProductAttributeValueClient {

    /**
     * 根据属性ID查询属性值列表
     */
    @GetMapping("/attribute/{attributeId}")
    Result<List<ProductAttributeValueDTO>> getAttributeValuesByAttributeId(@PathVariable Long attributeId);

    /**
     * 根据分类ID查询属性值列表
     */
    @GetMapping("/category/{categoryId}")
    Result<List<ProductAttributeValueDTO>> getAttributeValuesByCategoryId(@PathVariable Long categoryId);

    /**
     * 根据属性ID和值名称查询属性值
     */
    @GetMapping("/check")
    Result<ProductAttributeValueDTO> getAttributeValueByAttributeIdAndValue(
            @RequestParam Long attributeId,
            @RequestParam String value);

    /**
     * 新增属性值
     */
    @PostMapping
    Result<Boolean> addAttributeValue(@RequestBody ProductAttributeValueDTO productAttributeValueDTO);

    /**
     * 批量新增属性值
     */
    @PostMapping("/batch")
    Result<Boolean> batchAddAttributeValues(@RequestBody List<ProductAttributeValueDTO> productAttributeValueDTOs);

    /**
     * 更新属性值
     */
    @PutMapping
    Result<Boolean> updateAttributeValue(@RequestBody ProductAttributeValueDTO productAttributeValueDTO);

    /**
     * 根据属性ID删除属性值
     */
    @DeleteMapping("/attribute/{attributeId}")
    Result<Boolean> deleteAttributeValuesByAttributeId(@PathVariable Long attributeId);

    /**
     * 根据分类ID删除属性值
     */
    @DeleteMapping("/category/{categoryId}")
    Result<Boolean> deleteAttributeValuesByCategoryId(@PathVariable Long categoryId);

    /**
     * 根据属性ID列表查询属性值列表
     */
    @GetMapping("/attributes")
    Result<List<ProductAttributeValueDTO>> getAttributeValuesByAttributeIds(@RequestParam List<Long> attributeIds);

    /**
     * 检查属性值是否存在
     */
    @GetMapping("/exists")
    Result<Boolean> checkAttributeValueExists(
            @RequestParam Long attributeId,
            @RequestParam String value);

    /**
     * 根据ID查询属性值详情
     */
    @GetMapping("/{id}")
    Result<ProductAttributeValueDTO> getAttributeValueById(@PathVariable Long id);

    /**
     * 根据ID列表批量查询属性值
     */
    @GetMapping("/batch")
    Result<List<ProductAttributeValueDTO>> getAttributeValuesByIds(@RequestParam List<Long> ids);

    /**
     * 删除属性值
     */
    @DeleteMapping("/{id}")
    Result<Boolean> deleteAttributeValue(@PathVariable Long id);
}